package com.hyh.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hyh.common.domain.PageDTO;
import com.hyh.common.domain.PageQuery;
import com.hyh.common.exception.BadRequestException;
import com.hyh.domain.dto.ItemAddDTO;
import com.hyh.domain.dto.ItemDTO;
import com.hyh.domain.po.Item;
import com.hyh.domain.query.ItemPageQuery;
import com.hyh.enums.ItemStatus;
import com.hyh.mapper.ItemMapper;
import com.hyh.service.IItemService;
import org.springframework.stereotype.Service;

@Service
public class ItemServiceImpl extends ServiceImpl<ItemMapper, Item> implements IItemService {

    /**
     * 添加商品
     * @param itemAddDTO
     */
    @Override
    public void add(ItemAddDTO itemAddDTO) {
        Item item = new Item();
        BeanUtil.copyProperties(itemAddDTO, item);
        save(item);
    }

    @Override
    public PageDTO<ItemDTO> search(ItemPageQuery itemPageQuery) {
        if(itemPageQuery==null){
            throw new BadRequestException("未接收到参数");
        }
        Page<Item> result = lambdaQuery()
                .like(itemPageQuery.getItemName() != null, Item::getItemName, itemPageQuery.getItemName())
                .ge(itemPageQuery.getPrice() != null && itemPageQuery.getOrderTo() == 2, Item::getPrice, itemPageQuery.getPrice())
                .le(itemPageQuery.getPrice() != null && itemPageQuery.getOrderTo() == 1, Item::getPrice, itemPageQuery.getPrice())
                .eq(Item::getStatus, ItemStatus.NORMAL)
                .like(itemPageQuery.getCompany() != null, Item::getCompany, itemPageQuery.getCompany())
                .page(itemPageQuery.toMpPage());
        return PageDTO.of(result, ItemDTO.class);
    }

    @Override
    public void updateItem(ItemDTO itemDTO) {
        Item item = new Item();
        BeanUtil.copyProperties(itemDTO, item);
        boolean update = lambdaUpdate()
                .set(itemDTO.getItemName() != null, Item::getItemName, itemDTO.getItemName())
                .set(itemDTO.getPrice() != null, Item::getPrice, itemDTO.getPrice())
                .set(itemDTO.getCompany() != null, Item::getCompany, itemDTO.getCompany())
                .set(itemDTO.getStatus() != null, Item::getStatus, itemDTO.getStatus())
                .eq(Item::getId, itemDTO.getId())
                .update();
        if(!update){
            throw new RuntimeException("商品id输入错误");
        }
    }
}
